library ieee;
use ieee.std_logic_1164.all;

--数据选择器BUS_MUX：组合逻辑器件
--其输入包括：
	--源寄存器数据sr，
	--目标寄存器数据dr，
	--带符号位扩展的偏移地址offset，
	--PC，
	--以及从内存读取的立即数data、跳转地址等数据。

--在3位控制信号的控制下它进行ALU模块A、B端输入的选择
--16位改8位
entity bus_mux is
	port(alu_in_sel            : in std_logic_vector(2 downto 0);		--功能控制信号
	     data,pc,offset,sr,dr  : in std_logic_vector(7 downto 0);
	     alu_sr,alu_dr         : out std_logic_vector(7 downto 0));	    --输出alu的源寄存器与目的寄存器
end bus_mux;

architecture behave of bus_mux is
begin
	process(alu_in_sel,data,pc,offset,sr,dr)
	begin
		case alu_in_sel is
		when "000"=>
		alu_sr<=sr;
		alu_dr<=dr;
		when "001"=>
		alu_sr<=sr;
		alu_dr<="00000000";
		when "010"=>
		alu_sr<="00000000";
		alu_dr<=dr;
		when "011"=>
		alu_sr<=offset;
		alu_dr<=pc;
		when "100"=>
		alu_sr<="00000000";
		alu_dr<=pc;
		when "101"=>
		alu_sr<="00000000";
		alu_dr<=data;
		when others=>
		alu_sr<="00000000";
		alu_dr<="00000000";
		end case;
	end process;
end behave;